import { ensureRenderer } from "./runtime-core/renderer";

/**
 * 根据处理传入的参数，返回一个Element
 * @param selectorOrElement 元素选择器或元素本身
 * @returns 返回一个Element
 */
function getContainer(selectorOrElement: string | Element) {
  // 如果传入的是字符串,则表示当前为元素选择器
  if (typeof selectorOrElement === "string") {
    return document.querySelector(selectorOrElement);
  }
  return selectorOrElement;
}

/**
 * 创建一个Vue实例
 * @param args 实例初始化参数
 * @returns 返回创建完成后的实例
 */
export function createApp(...args: any[]) {
  // 先去获取当前环境的渲染器
  const renderer = ensureRenderer();
  // 根据当前的渲染器去创建实例
  const app = renderer.createApp(...args);
  const { mount } = app;
  // 重新代理mount
  app.mount = (selectorOrElement: string | Element) => {
    const container = getContainer(selectorOrElement);
    if (!container) return;
    mount(container);
  };

  // 返回创建后的实例
  return app;
}

export default {};
